home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Nebula 2
/
Nebula Two.iso
/
SourceCode
/
Tutorial
/
Cookbook
/
36.Rnd
/
Random.m
< prev
next >
Wrap
Text File
|
1995-06-12
|
2KB
|
134 lines
/* Generated by Interface Builder */
#import "Random.h"
#import <stdio.h>
#import <libc.h>
#import <appkit/nextstd.h>
#import <appkit/Control.h>
#import <appkit/Form.h>
#import <appkit/Text.h>
#import <appkit/Matrix.h>
#import <appkit/ScrollView.h>
#import <appkit/Application.h>
extern void srandom();
@implementation Random
+new {
int i;
self = [super new];
[self initialize];
return self;
}
-initialize {
int i;
id tmp_id;
[self stop:self];
total = 0;
average = 0.0;
numGen = 0;
[numGenForm setIntValue:numGen];
[averageForm setFloatValue:average];
for (i=0; i<100; i++) {
numbers[i] = 0;
tmp_id = [textMatrix findCellWithTag:i];
[tmp_id setStringValue:"0"];
}
srandom(time(0));
scrollText = [scrollView docView];
[scrollText setText:""];
numberText[0] = '\0';
}
- setNumGenForm:anObject
{
numGenForm = anObject;
return self;
}
- setAverageForm:anObject
{
averageForm = anObject;
return self;
}
- setTextMatrix:anObject
{
textMatrix = anObject;
return self;
}
- setScrollView:anObject
{
scrollView = anObject;
return self;
}
void update (teNum, now, myself)
DPSTimedEntry teNum;
double now;
id myself;
{
[myself doTimedEntry];
}
- doTimedEntry
{
char string[5];
static id this_text;
newNumber = (random() % 100) + 1; /* random number from 1 to 100 */
numGen += 1;
if (numGen > MAX_COUNT)
[self stop:self];
total += newNumber;
numbers[newNumber]++;
average = (float) total / (float) numGen;
[numGenForm setIntValue:numGen];
[averageForm setFloatValue:average];
this_text = [textMatrix findCellWithTag:newNumber];
sprintf(string, "%d", numbers[newNumber]);
[this_text setStringValue:string];
sprintf(string, "%d\n", newNumber);
strcat(numberText, string);
[scrollText setText:numberText];
}
// Good programming practice. Free what you create!
- free
{
[self stop:self];
return [super free];
}
- start:sender
{
if (!running) {
running = 1;
clockTE = DPSAddTimedEntry(0.0, &update, self, NX_MODALRESPTHRESHOLD);
}
return self;
}
- stop:sender
{
if (running) {
running = 0;
DPSRemoveTimedEntry (clockTE);
}
return self;
}
- reset:sender
{
[self initialize];
return self;
}
@end